﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PSE.Framework.Service.ExceptionHandling
{
    public class ExceptionBase : Exception
    {
        #region Fields
        private int _errorNumber = 0; // Erro number associated to business exception
        private string _errorMessage = "";
        #endregion

        #region Constructors

        /// <summary>
        /// Construtor that will generate a simple message, with no special format.
        /// </summary>
        /// <param name="errorNumber">The error number.</param>
        public ExceptionBase(int errorNumber)
            : base()
        {
            RetrieveMessage(errorNumber);
            _errorNumber = errorNumber;
        }

        #endregion

        #region Private Members

        /// <summary>
        /// Este método obtém a mensagem e resource key da exceção.
        /// A mensagem é retornada como string para ser usada no construtor da classe base Exception,
        /// já que a mensagem só pode ser setada no construtor desta classe (Exception.Message é readonly).
        /// </summary>
        /// <param name="errorMessage"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        private void RetrieveMessage(int errorNumber)
        {
            _errorMessage = ExceptionHandling.ErrorMessage.RetrieveErrorMessage(errorNumber);
        }

        #endregion

        #region Public Members


        /// <summary>
        /// Returns the error number.
        /// </summary>
        public int ErrorNumber
        {
            get { return _errorNumber; }
        }

        /// <summary>
        /// Returns the resource key.
        /// </summary>
        public string ErrorMessage
        {
            get { return _errorMessage; }
        }


        #endregion

        public override string Message
        {
            get
            {
                return string.Format("{0} - {1}", _errorNumber, _errorMessage);
            }
        }

    }
}
